# 1. 使用不同的开发板内核时, 一定要修改KERN_DIR
# 2. KERN_DIR中的内核要事先配置、编译, 为了能编译内核, 要先设置下列环境变量:
# 2.1 ARCH,          比如: export ARCH=arm64
# 2.2 CROSS_COMPILE, 比如: export CROSS_COMPILE=aarch64-linux-gnu-
# 2.3 PATH,          比如: export PATH=$PATH:/home/book/100ask_roc-rk3399-pc/ToolChain-6.3.1/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin 
# 注意: 不同的开发板不同的编译器上述3个环境变量不一定相同,
#       请参考各开发板的高级用户使用手册

KERNEL_PATH = /home/ubt-2/mywork/s3c2440/kernel/linux-4.15
#KERNEL_PATH=/home/mat/workspace/Board/kernel/4_15_dt/linux-4.15

all:
	make -C $(KERNEL_PATH) M=$(PWD) modules

clean:
	make -C $(KERNEL_PATH) M=$(PWD) modules clean
	rm -rf modules.order

obj-m += module_drv.o

# 一个.o目标文件的生成依赖多个源文件时
#     obj-m  += hello.o
#     hello-y := a.o b.o hello_world.o
# hello.o目标文件依赖于a.o,b.o,hello_world.o
# a.o和b.o没有指定源文件,
# 根据推导规则就是依赖源文件a.c,b.c,hello_world.c.
# 除了hello-y,同时也可以用hello-objs
    # obj-m  += hello.o
    # hello-objs := a.o b.o hello_world.o
	# ccflags-y += -I$(src)/linux/include -I$(src)/core/include -I$(src)/include

# 在内核态,编译的选项由EXTRA_CFLAGS, EXTRA_AFLAGS和 EXTRA_LDFLAGS
# 修改成了ccflags-y asflags-y和ldflags-y
# ccflags-y asflags-y和ldflags-y
# 三个变量的值分别对应编译、汇编、链接时的参数

# 当编译的目标模块依赖多个头文件时,kbuild对头文件的放置有这样的规定:
#     直接放置在makefile同在的目录下,在编译时当前目录会被添加到头文件搜索目录。
#     放置在系统目录,这个系统目录是源代码目录中的include/linux/
#     与通用的makefile一样,使用-I$(DIR)来指定,不同的是,代表编译选项的变量是固定的,为ccflag.
#     一般的用法是这样的：
#             ccflags-y := -I$(DIR)/include   
# kbuild就会将$(DIR)/includ目录添加到编译时的头文件搜索目录中

# 同时编译多个可加载模块
# kbuild支持同时编译多个可加载模块,也就是生成多个.ko文件,它的格式是这样的:
#     obj-m := foo.o bar.o
#     foo-y := <foo_srcs>
#     bar-y := <bar_srcs>



